from django.core.cache import cache
from django.http import JsonResponse
from django.shortcuts import render

# Create your views here.
from django.views import View

from apps.areas.models import Area

"""
查询省信息： select * from tb_areas where parent_id is NULL;

          Area.objects.filter(parent_isnull = True)
          Area.objects.filter(parent_id_isnull = True)

查询市信息： select * from tb_areas where parent_id = 510000;

          Area.objects.filter(parent_id = 510000)
          Area.objects.filter(parent = 510000)
          
          province = Area.objects.get(id=510000)  # 省
          province.subs.all()                     # 市


查询县信息： select * from tb_areas where parent_id = 510700;

          Area.objects.filter(parent_id = 510700)
          Area.objects.filter(parent = 510700)
          
          province = Area.objects.get(id=510700)    # 市
          province.subs.all()                       # 县

"""


# 获取省份信息
"""
前端:
    当页面加载时，会发送axios请求，来获取省份信息
后端:
    请求：
        不需要传递参数
    业务逻辑：
        查询省份信息
    响应：
        JSON    
        
    路由：areas
    步骤:
        1.查询省份信息
        2.返回响应
"""


class AreaView(View):
    # 获取省份数据
    def get(self, request):
        # 先查询缓存中是否有
        province_list = cache.get('province')

        # 如果没有
        if province_list is None:
            # 1. 查询省份信息
            provinces = Area.objects.filter(parent=None)

            # 2. 将对象转换为字典数据
            province_list = []
            for province in provinces:
                province_list.append({
                    'id': province.id,
                    'name': province.name
                })

            # 返回数据之前，保存缓存数据
            cache.set('province', province_list, 24*3600)

        # 3. 返回响应
        return JsonResponse({'code':0, 'errmsg': 'ok', 'province_list': province_list})


class SubAreaView(View):

    def get(self, request, id):
        # 1. 获取市的信息
        cities = Area.objects.filter(parent=id)

        cities_list = []
        for city in cities:
            cities_list.append({
                'id': city.id,
                'name': city.name
            })

        return JsonResponse({'code':0, 'errmsg': 'ok', 'sub_data': {'subs':cities_list}})


"""
请求
业务逻辑
响应


增（注册）
    1.接收数据
    2.验证数据
    3.数据入库
    4.返回响应
删
    1.查询到指定记录
    2.删除数据
    3.返回响应
改（个人的邮箱）
    1.查询到指定记录
    2.接收数据
    3.验证数据
    4.数据更新
    5.返回响应
查（个人中心的数据展示，省市区）
    1.查询指定数据
    2.将对象数据转换为字典数据
    3.返回响应

"""